package com.ynet.middleground.user.service;

import java.util.List;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.user.bean.*;
import com.ynet.middleground.user.dto.*;

/**
 * @program: 2019-10-12_userCenter
 * @description: 组织管理服务
 * @author: DaiGaoLe
 * @create: 2019-10-23 17:42
 **/
public interface OrganizationManagementService {
    /**
     * @program: 2019-10-12_userCenter
     * @description: 添加港内员工服务
     * @author: DaiGaoLe
     * @create: 2019-10-23 15:25
     **/
    public ServiceResult<Integer> addEmployee(@Valid AddEmployeeReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 港内员工信息查询服务
     * @author: DaiGaoLe
     * @create: 2019-10-23 15:25
     **/
    public ServiceResult<List<EmployeeInfoDto>> queryEmployee(@Valid QueryEmployeesInfoReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 添加机构/部门服务
     * @author: DaiGaoLe
     * @create: 2019-10-23 15:25
     **/
    public ServiceResult<Integer> addOrganizationalStructure(@Valid OrganizationalStructureReq requestObject);

    /**
     * @Description: 查询机构/部门
     * @Param: QueryOrganizationalStructureReq
     * @return: ServiceResult<List<OrganizationalStructureDto>>
     * @Author: DaiGaoLe
     * @Date: 2019/10/24
     */
    public ServiceResult<List<OrganizationalStructureDto>>
        queryOrganizationalStructureInfo(@Valid QueryOrganizationalStructureReq requestObject);

    /**
     * @Description: 查询机构/部门(带该组织及子组织员工人员数量)
     * @Param: QueryOrganizationalStructureReq
     * @return: ServiceResult<List<OrganizationalStructureDto>>
     * @Author: DaiGaoLe
     * @Date: 2019/10/24
     */
    public ServiceResult<List<OrganizationalStructureWithCountsDto>>
        queryOrganizationalStructureInfoWithCounts(@Valid QueryOrganizationalStructureReq requestObject);

    /**
     * @Description: 修改机构/ 部门
     * @Param: QueryOrganizationalStructureReq
     * @return: ServiceResult<List<OrganizationalStructureDto>>
     * @Author: DaiGaoLe
     * @Date: 2019/10/24
     */
    public ServiceResult<String>
        modifyOrganizationalStructureReq(@Valid ModifyOrganizationalStructureReq requestObject);

    /**
     * @Description: 删除机构/部门
     * @Param: QueryOrganizationalStructureReq
     * @return: ServiceResult<List<OrganizationalStructureDto>>
     * @Author: DaiGaoLe
     * @Date: 2019/10/24
     */
    public ServiceResult<String> deleteOrganizationalStructure(@Valid DeleteOrganizationalStructureReq requestObject);

    /**
     * @Description: 修改港内员工信息
     * @Param: QueryOrganizationalStructureReq
     * @return: ServiceResult<List<OrganizationalStructureDto>>
     * @Author: DaiGaoLe
     * @Date: 2019/10/24
     */
    public ServiceResult<String> changeEmployeesInfo(@Valid ChangeEmployeesInfoReq requestObject);

    /**
     * @Description: 钉钉专用港内员工数据查询
     * @param requestObject
     * @return
     */
    ServiceResult<List<DingTalkSearchOrgRelationDTO>>
        queryDingTalkEmployee(@Valid QueryDingTalkEmployeesInfoReq requestObject);

    /**
     * @Description: 港内员工数据查询(移动审批专用)
     * @param requestObject
     * @return
     */
    ServiceResult<List<DingTalkSearchEmployeesDTO>>
        queryEmployeesForMobile(@Valid DingTalkSearchEmployeesInfoReq requestObject);

    /**
     * @Description: 获取港内组织上下级ID(移动审批专用)
     * @param getParentAndChildReq
     * @return
     */
    ServiceResult<List<String>> parentAndChildOrganizationIds(@Valid GetParentAndChildReq getParentAndChildReq);

    // /**
    // * @param requestObj
    // * @return
    // */
    // ServiceResult<List<OrganizationalListInfoDto>> pursuantTelephoneGetUserName(@Valid TelephoneGetUserNameReq
    // requestObj);
}
